package com.xr.blog.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xr.blog.pojo.BlogArticle;

import java.util.List;

/**
 * 文章表
 *
 * @author XRJ
 * @email 1033835209@qq.com
 * @date 2020-07-07 20:31:38
 */
public interface BlogArticleService extends IService<BlogArticle> {
    /**
     * 随机查询文章
     * @param count 需要查询的数量
     * @return
     */
    List<BlogArticle> findRandomArticles(Integer count);

    /**
     * 获得所有置顶文章
     * @return 文章集合
     */
    List<BlogArticle> findAllTopArticles();

    /**
     * 根据关键字分页查询文章
     * @param page 分页对象
     * @param keyword 关键字
     * @return
     */
    IPage<BlogArticle> findPageByKeyword(Page<BlogArticle> page, String keyword);

    /**
     * 查询热门文章
     * @param count 需要查询的数量
     * @return
     */
    List<BlogArticle> findHotArticles(Integer count);

    /**
     * 根据链接获取文章
     * @param url 链接
     * @return 文章
     */
    BlogArticle findArticleByUrl(String url);

    /**
     * 根据ID查询上一篇文章
     * @param id 文章ID
     * @return 文章
     */
    BlogArticle findPreviousById(Long id);

    /**
     * 根据ID查询下一篇文章
     * @param id 文章ID
     * @return 文章
     */
    BlogArticle findNextById(Long id);

    /**
     * 分页查询指定分类文章
     * @param page 分页对象
     * @param categoryId 分类ID
     * @return
     */
    IPage<BlogArticle> findPageByCategory(Page<BlogArticle> page,Long categoryId);

    /**
     * 分页查询指定标签下的文章
     * @param page 分页对象
     * @param tagId 标签ID
     * @return
     */
    IPage<BlogArticle> findPageByTag(Page<BlogArticle> page,Long tagId);


    /**
     * 获取最新的n条文章
     * @param size 需要获取的条数
     * @return
     */
    List<BlogArticle> findLatestArticle(Integer size);

    /**
     * 条件查询文章：title，category_id，status，type
     * @param page 分页参数
     * @param title
     * @param categoryId
     * @param status
     * @param type
     * @return
     */
    IPage<BlogArticle> findArticleByCondition(Page page,String title,Long categoryId,Integer status,Integer type);


    /**
     * 根据ID获取文章
     *
     * @param articleId ID
     * @return 文章
     */
    BlogArticle findArticleById(Long articleId);




}

